IF, CHOOSE, FOREACH এবং WHERE ট্যাগ ব্যবহার

Java Technologies - আইবাটিস (iBATIS) - Dynamic SQL এবং iBATIS
193

iBATIS (বর্তমানে MyBatis নামে পরিচিত) SQL কোডে dynamic SQL ব্যবহারের জন্য বিভিন্ন ট্যাগ প্রদান করে। এগুলি আপনাকে SQL কোয়েরি ডাইনামিকভাবে তৈরি করতে সহায়তা করে, যেখানে আপনি কন্ডিশনাল স্টেটমেন্ট, লিস্ট প্রসেসিং, এবং অন্যান্য ডাইনামিক ফিল্টারিং কার্যকরভাবে ব্যবহার করতে পারেন। এই ট্যাগগুলি হল:

  1. <if>: কন্ডিশনাল লজিক তৈরি করার জন্য ব্যবহার করা হয়।
  2. <choose>: if-else লজিকের জন্য ব্যবহৃত হয়, যেখানে একটি শর্ত মেলালে পরবর্তী শর্তগুলোর পরীক্ষা হয় না।
  3. <foreach>: একটি লিস্ট বা অ্যারে থেকে একাধিক মানের সাথে IN কন্ডিশন তৈরি করতে ব্যবহৃত হয়।
  4. <where>: SQL WHERE ক্লজ তৈরিতে ব্যবহৃত হয়, যেখানে স্বয়ংক্রিয়ভাবে AND যোগ করা হয়।

এখানে এই ট্যাগগুলির বিস্তারিত ব্যবহার এবং উদাহরণ দেওয়া হলো।


1. IF Tag

<if> ট্যাগটি SQL কোডে একটি শর্ত নির্ধারণ করার জন্য ব্যবহৃত হয়। যখন একটি কন্ডিশন মেট হবে, তখন সেই অংশ SQL কোয়েরিতে অন্তর্ভুক্ত হবে।

Example: Using <if> for Conditional SQL

<select id="getEmployeeByConditions" resultType="Employee">
    SELECT * FROM employees
    <where>
        <if test="name != null">
            AND name = #{name}
        </if>
        <if test="email != null">
            AND email = #{email}
        </if>
        <if test="age != null">
            AND age = #{age}
        </if>
    </where>
</select>

Explanation:

  • <if test="name != null">: যদি name প্যারামিটারটি null না হয়, তবে AND name = #{name} এই SQL শর্তটি কুয়েরিতে যোগ হবে।
  • <where>: where ব্লকটি AND শর্ত যোগ করার ক্ষেত্রে অতিরিক্ত AND যোগ করা এড়ায়, যাতে অপ্রয়োজনীয় AND কন্ডিশন না থাকে।

Usage:

Map<String, Object> params = new HashMap<>();
params.put("name", "John");
params.put("email", "john@example.com");

List<Employee> employees = sqlSession.selectList("getEmployeeByConditions", params);

2. CHOOSE Tag

<choose> ট্যাগটি if-else লজিকের মতো কাজ করে, যেখানে আপনি একাধিক শর্তের মধ্যে প্রথম সত্য শর্তটি নির্বাচন করতে পারেন।

Example: Using <choose> for Conditional SQL

<select id="getEmployeeByType" resultType="Employee">
    SELECT * FROM employees
    <where>
        <choose>
            <when test="status == 'active'">
                AND status = 'active'
            </when>
            <when test="status == 'inactive'">
                AND status = 'inactive'
            </when>
            <otherwise>
                AND status IS NULL
            </otherwise>
        </choose>
    </where>
</select>

Explanation:

  • <choose>: এটি একটি if-else ব্লকের মতো কাজ করে, যেখানে <when> এবং <otherwise> অংশ রয়েছে।
  • <when>: প্রথম সত্য শর্ত মেললেই পরবর্তী শর্তগুলো পরীক্ষা করা হয় না।
  • <otherwise>: সব শর্ত ভুল হলে এই অংশটি কার্যকর হয়।

Usage:

Map<String, String> params = new HashMap<>();
params.put("status", "active");

List<Employee> employees = sqlSession.selectList("getEmployeeByType", params);

3. FOREACH Tag

<foreach> ট্যাগটি একটি লিস্ট বা অ্যারের মাধ্যমে একাধিক মান নিয়ে IN কন্ডিশন তৈরি করার জন্য ব্যবহৃত হয়। এটি ডাইনামিকভাবে ইনপুট মানগুলিকে একটি SQL কোয়েরির অংশে যোগ করে।

Example: Using <foreach> for IN Clause

<select id="getEmployeesByIds" resultType="Employee">
    SELECT * FROM employees
    WHERE id IN
    <foreach item="id" collection="ids" open="(" close=")" separator=",">
        #{id}
    </foreach>
</select>

Explanation:

  • <foreach>: এটি একটি লুপের মতো কাজ করে এবং ids লিস্টের প্রতিটি উপাদানকে IN কন্ডিশনে যোগ করে।
  • open="(" এবং close=")": এটি SQL কোয়েরির IN ক্লজে () যোগ করে।
  • separator=",": এটি লিস্টের মধ্যে কমা যোগ করে।

Usage:

List<Integer> ids = Arrays.asList(1, 2, 3, 4);

Map<String, Object> params = new HashMap<>();
params.put("ids", ids);

List<Employee> employees = sqlSession.selectList("getEmployeesByIds", params);

4. WHERE Tag

<where> ট্যাগটি WHERE ক্লজে ডাইনামিক শর্ত যোগ করার জন্য ব্যবহৃত হয়। এটি স্বয়ংক্রিয়ভাবে AND বা OR যোগ করে এবং প্রয়োজনে অতিরিক্ত শর্তও বাদ দেয়।

Example: Using <where> for SQL Conditions

<select id="getEmployeesByConditions" resultType="Employee">
    SELECT * FROM employees
    <where>
        <if test="name != null">AND name = #{name}</if>
        <if test="age != null">AND age = #{age}</if>
        <if test="email != null">AND email = #{email}</if>
    </where>
</select>

Explanation:

  • <where>: এটি একটি SQL কুয়েরির মধ্যে WHERE ক্লজ তৈরি করে এবং শর্তগুলো AND দিয়ে যুক্ত হয়।
  • <if>: যদি কোনো শর্ত থাকে, তবে সেটি SQL কুয়েরিতে যোগ হবে, অন্যথায় তা বাদ যাবে।

Usage:

Map<String, Object> params = new HashMap<>();
params.put("name", "John");
params.put("age", 30);

List<Employee> employees = sqlSession.selectList("getEmployeesByConditions", params);

Combining All Tags in a Single Query

আপনি সমস্ত ডাইনামিক SQL ট্যাগ ব্যবহার করে একটি জটিল কুয়েরি তৈরি করতে পারেন।

Example: Combining IF, CHOOSE, FOREACH, and WHERE

<select id="getEmployeesByComplexConditions" resultType="Employee">
    SELECT * FROM employees
    <where>
        <if test="name != null">AND name = #{name}</if>
        <if test="age != null">AND age = #{age}</if>
        <choose>
            <when test="status == 'active'">
                AND status = 'active'
            </when>
            <when test="status == 'inactive'">
                AND status = 'inactive'
            </when>
            <otherwise>
                AND status IS NULL
            </otherwise>
        </choose>
        <if test="ids != null and ids.size() > 0">
            AND id IN
            <foreach item="id" collection="ids" open="(" close=")" separator=",">
                #{id}
            </foreach>
        </if>
    </where>
</select>

Explanation:

  • <if>: ডাইনামিক কন্ডিশনাল শর্ত যোগ করতে ব্যবহৃত হয়।
  • <choose>: status এর জন্য if-else লজিক প্রয়োগ করা হয়।
  • <foreach>: একাধিক আইডি দিয়ে IN কন্ডিশন তৈরি করা হয়।

iBATIS (MyBatis) এর Dynamic SQL ট্যাগগুলো SQL কোয়েরি তৈরি করার ক্ষেত্রে খুবই কার্যকরী। আপনি <if>, <choose>, <foreach>, এবং <where> ব্যবহার করে কোয়েরি কোডকে আরও ফ্লেক্সিবল এবং ডাইনামিক করে তুলতে পারেন, যা অ্যাপ্লিকেশনের পারফরম্যান্স উন্নত করতে সাহায্য করে।

  • <if>: কন্ডিশনাল শর্ত যোগ করতে ব্যবহৃত হয়।
  • <choose>: if-else শর্ত তৈরির জন্য ব্যবহৃত হয়।
  • <foreach>: একাধিক মান দিয়ে IN কন্ডিশন তৈরি করার জন্য ব্যবহৃত হয়।
  • <where>: WHERE ক্লজ তৈরি করার জন্য ব্যবহৃত হয়, যাতে অপ্রয়োজনীয় AND বাদ যায়।

এই ট্যাগগুলির সাহায্যে MyBatis-এ SQL কোড আরও শক্তিশালী এবং কার্যকরী করা সম্ভব।

Content added By
Promotion
NEW SATT AI এখন আপনাকে সাহায্য করতে পারে।

Are you sure to start over?

Loading...